﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _4_值传递和引用传递
{
    class Program
    {
        static void Main(string[] args)
        {
            //值类型：int double char decimal bool enum struct
            //引用类型：string 数组 自定义类 集合 object 接口

            //值类型在复制的时候，传递的是这个值的本身
            //引用类型在复制的时候，传递的是这个对象的引用
            //p1和p2指向栈中同一个存储空间
            //Person p1 = new Person();
            //p1.Name = "鹿菌";
            //Person p2 = p1;
            //p2.Name = "塞裙";
            //Console.WriteLine("p1:{0}\np2:{1}", p1.Name, p2.Name);
            //Console.ReadKey();

            //Person p = new Person();
            //p.Name = "鹿菌";
            //Test(p);
            //Console.WriteLine(p.Name);
            //Console.ReadKey();

            //字符串的特殊性：不可变性，初始化的时候分别在栈中开辟了2个存储空间，分别指向同一个内容
            string s1 = "鹿菌";
            string s2 = s1;
            s2 = "塞裙";
            Console.WriteLine(s1);
            Console.WriteLine(s2);
            Console.ReadKey();
        }

        public static void Test(Person p1)  //Person p1=p
        {
            Person p = p1;
            p.Name = "塞裙";
        }
    }

    public class Person
    {
        private string _name;

        public string Name
        {
            get
            {
                return _name;
            }

            set
            {
                _name = value;
            }
        }
    }
}
